<?php

/* 
 * 公用Controller
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
class publicController 
{
    private function __construct() {
    }
    public function __clone() {
    }

    public static function load() {
        return new self();
    }
    /**
     * 清除session 并释放
     */
    public function clear_session(){
        $_SESSION = null;
        session_destroy();
    }
    /**
     * 获取当前时间。PRC
     * @return int
     */
    public function timeToday(){
        date_default_timezone_set('PRC');
        return time();
    }
    /**
     * 将字符串时间转时间戳
     * @param string $date 字符串时间
     * @return int
     */
    public function strToTime($date) {
        date_default_timezone_set('PRC');
        return strtotime($date);
    }
    /**
     * 将时间戳转字符串时间
     * @param int $time 时间戳
     * @param string $str 可为空，需要输出的时间格式，如Y-m-d H:i:s    
     * @return type
     */
    public function timeToStr($time, $str = '') {
        if(empty($str)) {
            $str = 'Y-m-d H:i:s';
        }
        date_default_timezone_set('PRC');
        return date($str, $time);
    }

    /**
     * 判断是否是有效的手机号
     * @param type $mobile
     * @return boolean
     */
    public function is_mobile($mobile) {
        $mobile_phone = trim($mobile);
        if(preg_match("/^1[2-9]{1}[1-9]{1}[0-9]{8}$/", $mobile_phone)) {
            return $mobile_phone;
        }
        return false;
    }
    /**
     * 记录时间
     * @return type
     */
    public function exe_time(){
        return microtime(true);
    }
    /**
     * 计算结果
     * @param int $start 开始时间 
     * @param int $end 结束时间 
     * @return float 结果
     */
    public function exe_calc_result($start, $end) {
        return round($end - $start, 2);
    }
   
    /**
     * 是否是线上 ，用于专供线上执行的代码。
     * @return boolean true 是，false 否
     */
    public function is_online() {
        $ip = $_SERVER['SERVER_ADDR'];
        if($ip == '127.0.0.1') {
            return false;
        }
        return true;
    }
    /**
     * 获取浏览器内核是什么
     * @return string
     */
    function getBrowser(){
        $agent = $_SERVER["HTTP_USER_AGENT"];
        if(strpos($agent,'MSIE')!==false || strpos($agent,'rv:11.0')) //ie11判断
        return "ie";
        else if(strpos($agent,'Firefox')!==false)
        return "firefox";
        else if(strpos($agent,'Chrome')!==false)
        return "chrome";
        else if(strpos($agent,'Opera')!==false)
        return 'opera';
        else if((strpos($agent,'Chrome')==false)&&strpos($agent,'Safari')!==false)
        return 'safari';
        else
        return 'unknown';
    }
    /**
     * 获取浏览器型号
     * @return string
     */
    function getBrowserVer(){
        if (empty($_SERVER['HTTP_USER_AGENT'])){    //当浏览器没有发送访问者的信息的时候
            return 'unknow';
        }
        $agent= $_SERVER['HTTP_USER_AGENT'];
        if (preg_match('/MSIE\s(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/FireFox\/(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/Opera[\s|\/](\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif (preg_match('/Chrome\/(\d+)\..*/i', $agent, $regs))
            return $regs[1];
        elseif ((strpos($agent,'Chrome')==false)&&preg_match('/Safari\/(\d+)\..*$/i', $agent, $regs))
            return $regs[1];
        else
            return 'unknow';
    }
    /**
     * 获取浏览器所有信息
     * @return type
     */
    function getBrowserAll() {
        return $_SERVER['HTTP_USER_AGENT'];
    }
    /**
     * 操作系统
     * @return string
     */
    public function GetOs() {
        if (!empty($_SERVER['HTTP_USER_AGENT'])) {
            $OS = $_SERVER['HTTP_USER_AGENT'];
            if (preg_match('/win/i', $OS)) {
                $OS = 'Windows';
            } elseif (preg_match('/mac/i', $OS)) {
                $OS = 'MAC';
            } elseif (preg_match('/linux/i', $OS)) {
                $OS = 'Linux';
            } elseif (preg_match('/unix/i', $OS)) {
                $OS = 'Unix';
            } elseif (preg_match('/bsd/i', $OS)) {
                $OS = 'BSD';
            } else {
                $OS = 'Other';
            }
            return $OS;
        } else {
            return "获取访客操作系统信息失败！";
        }
    }
    /**
     * 获得访客真实ip
     * @return type
     */
    public function Getip(){
        if(!empty($_SERVER["HTTP_CLIENT_IP"])){   
           $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ //获取代理ip
         $ips = explode(',',$_SERVER['HTTP_X_FORWARDED_FOR']);
        }
        if($ip){
           $ips = array_unshift($ips,$ip); 
        }

        $count = count($ips);
        for($i=0;$i<$count;$i++){   
          if(!preg_match("/^(10|172\.16|192\.168)\./i",$ips[$i])){//排除局域网ip
           $ip = $ips[$i];
           break;    
           }  
        }  
        $tip = empty($_SERVER['REMOTE_ADDR']) ? $ip : $_SERVER['REMOTE_ADDR']; 
        return $tip;
    }
  
    /**
     * 产生随机的0-9 随机码
     * @param int $num 可选 默认4位
     * @return string 返回码列
     */
    public function create_random_code($num = 4) {
        $num_str = '0123456789';
        $code = '';
        for($i = 0; $i < $num; $i ++) {
            $code .= $num_str[mt_rand(0, 9)];
        }
        return $code;
    }
    /**
     * 計算時間差
     * @param int $start_time 開始時間戳
     * @param int $end_time 結束時間戳
     * @param boolean $is_arr 默認返回array,false則返回string
     * @return type
     */
    public function calc_diff($start_time, $end_time, $is_arr = true){
        $diff = $end_time - $start_time; //得出时间戳差值
        /* 这个只是提示
        echo floor($cle/60); //得出一共多少分钟
        echo floor($cle/3600); //得出一共多少小时
        echo floor($cle/3600/24); //得出一共多少天
        */
        /*Rming()函数，即舍去法取整*/
        $d = floor($diff/3600/24);
        $h = floor(($diff % (3600*24)) / 3600);  //%取余
        $m = floor(($diff % (3600*24)) % 3600/60);
        $s = floor(($diff % (3600*24)) % 60);
        if($is_arr) {
            return array(
                'd' => $d,
                'h' => $h,
                'm' => $m,
                's' => $s,            
            );
        } else {
            return "{$d}天{$h}小时{$m}分{$s}秒";
        }
    }
    /**
     * 转换友好时间
     * @param type $sTime 时间戳
     * @param type $ec 是否是ecshop系统时间
     * @return type
     */
    public function friendlyDate($sTime){
        if(empty($sTime)){
            return '';
        }
        $cTime = time();
        $dTime = $cTime - $sTime;
        if($dTime < 60) {
            return $dTime . '秒前';
        } elseif($dTime < 60 * 60) {
            return floor($dTime/60) . '分钟前';
        } elseif($dTime >= 60 * 60 && $dTime < 24 * 60 * 60) {
            return floor($dTime/(60 * 60)) . '小时前';
        } elseif($dTime >= 24 * 60 * 60 && $dTime < 7 * 24 * 60 * 60) {
            return floor($dTime / (24 * 60 * 60)) . '天前';
        } elseif($dTime >= 7 * 24 * 60 * 60 && $dTime < 4 * 7 * 24 * 60 * 60){
            return floor($dTime / (7 * 24 * 60 * 60)) . '星期前';
        } elseif($dTime >= 4 * 7 * 24 * 60 * 60 && $dTime < 12 * 4 * 7 * 24 * 60 * 60) {
            return floor($dTime /(4 * 7 * 24 * 60 * 60)) . '月前';
        } elseif($dTime >= 12 * 4 * 7 * 24 * 60 * 60 && $dTime < 10 * 12 * 4 * 7 * 24 * 60 * 60) {
            return floor($dTime /(12 * 4 * 7 * 24 * 60 * 60)) . '年前';
        } else {
            return date("Y-m-d H:i:s", $sTime);
        }
    }
    /**
     * 生成验证码图片
     * @return string 返回验证码里的图片
     */
    public function create_captcha(){
        $captcha = new captcha();
        $captcha->doimg();
        return $captcha->getCode();        
    }
}
